package com.web.kdl.service.flywheelDataAnalysis;

import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.web.kdl.common.result.CommonResult;
import com.web.kdl.component.WebSocketService;
import com.web.kdl.dao.flywheelDataAnalysis.FlywheelDataAnalysisDao;
import com.web.kdl.entity.flywheelDataAnalysis.FlywheelAlertAnalysis;
import com.web.kdl.entity.flywheelDataAnalysis.FlywheelDataAnalysis;
import com.web.kdl.entity.flywheelDataAnalysis.FlywheelStatusAnalysis;
import com.web.kdl.pojo.Vo.EnergyDataVo;
import com.web.kdl.pojo.Vo.FlyWheelData;
import com.web.kdl.pojo.Vo.FlywheelInfoVo;
import com.web.kdl.pojo.dto.SiteDto;
import com.web.kdl.service.createTable.TableDataType;
import com.web.kdl.service.report.Report1Service;
import com.web.kdl.util.RedisKeyUtil;
import com.web.kdl.util.RedisUtils;
import com.web.kdl.util.TableNameUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.util.CollectionUtils;

import java.text.SimpleDateFormat;
import java.util.*;

@Service
@Slf4j
public class FlywheelDataAnalysisServiceImpl implements FlywheelDataAnalysisService{
    @Autowired
    FlywheelDataAnalysisDao flywheelDataAnalysisDao;

    @Autowired
    private Report1Service report1Service;

    @Autowired
    private WebSocketService webSocketService;
    @Autowired
    private RedisUtils redisUtils;
    @Autowired
    private RedisKeyUtil redisKeyUtil;

    private void sendMessage(String siteName){
        log.info("发送Websocket消息");
        SiteDto dto = new SiteDto(siteName);
        //在data表中查询,当前站点下，统计所有飞轮'系统容量', '总放电量', '总充电量'
        CommonResult siteBaseInfo = report1Service.getSiteBaseInfo(dto);
        webSocketService.sendTextMsg("/response/"+siteName+"/getSiteBaseInfo",siteBaseInfo);

        //在data表中查询，获取站点下所有飞轮近一天的，可冲电功率,系统可放电功率，按时间分组(小时)，相加
        CommonResult recent7DaysDailyMaxPower = report1Service.getRecent7DaysDailyMaxPower(dto);
        webSocketService.sendTextMsg("/response/"+siteName+"/getSiteMaxPower",recent7DaysDailyMaxPower);

        /* 在data表查询,当前站点下，返回每一个飞轮(list)的'转速', '转子温度位移推算值', '充电计数', '放电计数','电机温度1', '系统可放电功率', '系统可冲电功率' */
        CommonResult allDetailSite = report1Service.getAllDetailSite(dto);
        webSocketService.sendTextMsg("/response/"+siteName+"/getSiteDetail",allDetailSite);

        CommonResult<List<EnergyDataVo>> allFlywheelEleCount = report1Service.getAllFlywheelEleCount(dto);
        webSocketService.sendTextMsg("/response/"+siteName+"/getSiteEle",allFlywheelEleCount);

        //在alert表查询，当前站
        CommonResult getSiteMonMsg = report1Service.getSiteMonMsg(dto);
        webSocketService.sendTextMsg("/response/"+siteName+"/getSiteMon",getSiteMonMsg);

        CommonResult allFlywheelStatus = report1Service.getAllFlywheelStatus(dto);
        webSocketService.sendTextMsg("/response/"+siteName+"/getSiteFlyWheelStatus",allFlywheelStatus);
    }
    @Transactional
    public void saveDate(List<FlywheelDataAnalysis> list, List<FlywheelStatusAnalysis> listStatus, List<FlywheelAlertAnalysis> listAlert, String sum_site,String sub_site, int flyWheelSerial){
        //list集合 stream转 map
        Map<String, FlyWheelData> flyWheelDataMap = list.stream()
                .collect(HashMap::new, (m, v) ->
                        m.put(v.getDeviceName(), new FlyWheelData(v.getDeviceName(), String.format("%.2f", v.getDataValue()), v.getUnit())),
                        HashMap::putAll);
        String topic ="/response/getLastValue/"+sum_site+"/"+sub_site+"/flywheel"+flyWheelSerial;
        webSocketService.sendTextMsg(topic,flyWheelDataMap);

        if(!CollectionUtils.isEmpty(list)){
            //构建表名 wheel_data_坎德拉站点1_flywheel1
            String wheelDataTableName = TableNameUtils.getDataTableName(sum_site,sub_site,flyWheelSerial, TableDataType.TEMP);
            flywheelDataAnalysisDao.insertlistflywheel(list,wheelDataTableName);
            log.info("{} 插入数据：{} 条", wheelDataTableName, list.size());
        }
        if(!CollectionUtils.isEmpty(listStatus)){
            //构建表名 wheel_status_坎德拉站点1_flywheel1
            String wheelStatusTableName = TableNameUtils.getStatusTableName(sum_site,sub_site,flyWheelSerial);
            flywheelDataAnalysisDao.insertStatusflywheel(listStatus,wheelStatusTableName);
        }
        if(!CollectionUtils.isEmpty(listAlert)){
            //构建表名 wheel_status_坎德拉站点1_flywheel1
            String wheelAlertTableName = TableNameUtils.getAlertTableName(sum_site,sub_site,flyWheelSerial);
            flywheelDataAnalysisDao.insertAlertflywheel(listAlert,wheelAlertTableName);
        }
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
            @Override
            public void afterCommit() {
                sendMessage(sum_site);
            }
        });

    }

    @Override
    public void flywheel100(byte[] bytes, String name, String sum_site, String sub_site, String flywheelId,int matrixId,int flyWheelSerial) {
        byte[] data = extractSubarray(bytes, 9, 200);
        int[] dateParts = new int[data.length/2];
        for (int i = 0; i < dateParts.length; i++) {
            int pos = i * 2;
            // 将两个字节合并为有符号的short，再转为int自动保留符号
            dateParts[i] = (short) (
                    ((data[pos] & 0xFF) << 8) |
                            (data[pos + 1] & 0xFF)
            );
        }

        //日期处理40001-40006
//        int year = Integer.parseInt(String.valueOf(dateParts[0]));
//        int month = Integer.parseInt(String.valueOf(dateParts[1]));
//        int day = Integer.parseInt(String.valueOf(dateParts[2]));
//        int hour = Integer.parseInt(String.valueOf(dateParts[3]));
//        int minute = Integer.parseInt(String.valueOf(dateParts[4]));
//        int second = Integer.parseInt(String.valueOf(dateParts[5]));
//        String datetimeStr = String.format(
//                "%04d-%02d-%02d %02d:%02d:%02d.0",  // 格式模板
//                year, month, day, hour, minute, second  // 按顺序对应占位符
//        );
        String datetimeStr = redisUtils.getString(RedisKeyUtil.getRedisTimeKey());

        List<FlywheelDataAnalysis> list = new ArrayList<>();
        List<FlywheelAlertAnalysis> listAlert = new ArrayList<>();
        List<FlywheelStatusAnalysis> listStatus = new ArrayList<>();

        //40007系统控制1:开机 0：关机
        String SystemControl = "未检测";
        if (dateParts[6] == 0){
            SystemControl = "关机";
        }else if (dateParts[6] == 1){
            SystemControl = "开机";
        }else {
            SystemControl = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统控制", SystemControl,"",flywheelId));

        //40008系统模式1:正常 0：待机
        String SystemMode = "未检测";
        if (dateParts[7] == 0){
            SystemMode = "待机";
        }else if (dateParts[7] == 1){
            SystemMode = "正常";
        }else {
            SystemMode = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统模式", SystemMode,"",flywheelId));

        //40009通信模式1:EMS远程模式   0：本地模式
        String CommunicationMode = "未检测";
        if (dateParts[8] == 0){
            CommunicationMode = "本地模式";
        }else if (dateParts[8] == 1){
            CommunicationMode = "EMS远程模式";
        }else {
            CommunicationMode = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "通信模式", CommunicationMode,"",flywheelId));

        //40010电机控制模式"bit0-电机故障复位: 1：故障复位，0：无动作
        //                 bit1-磁轴承故障复位：      1故障复位，  0：无动作
        //                 bit2-系统控制单元故障复位：1故障复位，  0：无动作"
        int status = dateParts[9];
        if ((status & 0x0001) != 0) {  // 检查第0位（0x0001）
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统故障复位", "故障复位","电机故障复位",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统故障复位", "无动作","电机故障复位",flywheelId));
        }
        if ((status & 0x0002) != 0) {  // 检查第0位（0x0001）
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统故障复位", "故障复位","磁轴承故障复位",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统故障复位", "无动作","磁轴承故障复位",flywheelId));
        }
        if ((status & 0x0004) != 0) {  // 检查第0位（0x0001）
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统故障复位", "故障复位","系统控制单元故障复位",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统故障复位", "无动作","系统控制单元故障复位",flywheelId));
        }

        //40011电机控制模式0：默认      1：电流源模式       2：电压源模式
        String MotorControl = "未检测";
        if (dateParts[10] == 0){
            MotorControl = "默认";
        }else if (dateParts[10] == 1){
            MotorControl = "电流源模式";
        }else if (dateParts[10] == 2) {
            MotorControl = "电压源模式";
        }else {
            MotorControl = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "电机控制模式", MotorControl,"",flywheelId));

        //40012系统功率设定值-1200.0~1200.0
        double systemPowrt = dateParts[11]/10;;
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"系统功率设定值",name + "-SCU",systemPowrt,"KW"));

        //40013空

        //40014待机指令

        //40015系统电压设定值0-1500
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"系统电压设定值",name + "-SCU",dateParts[14],"V"));

        //40016-40020备用

        //40021SCU序列号1~255
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"SCU序列号",name + "-SCU",dateParts[20],"/"));



        //40022系统运行状态反馈
        int status40022 = dateParts[21];
        if ((status40022 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统运行状态反馈", "系统开机","开机关机",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统运行状态反馈", "系统关机","开机关机",flywheelId));
        }
        if ((status40022 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统运行状态反馈", "开始起浮","起浮未起浮",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统运行状态反馈", "未起浮","起浮未起浮",flywheelId));
        }
        if ((status40022 & 0x0004) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统运行状态反馈", "起浮完成","起浮完成未完成",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统运行状态反馈", "起浮未完成","起浮完成未完成",flywheelId));
        }
        if ((status40022 & 0x0008) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统运行状态反馈", "预充完成","预充完成未完成",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "系统运行状态反馈", "预充未完成","预充完成未完成",flywheelId));
        }

        //40023系统工作状态
        int code = dateParts[22];
            switch (code) {
                case 0:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "初始化","",flywheelId));
                    break;
                case 1:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "停机","",flywheelId));
                    break;
                case 2:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "预充","",flywheelId));
                    break;
                case 3:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "待机","",flywheelId));
                    break;
                case 4:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "充电","",flywheelId));
                    break;
                case 5:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "放电","",flywheelId));
                    break;
                case 6:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "闭锁","",flywheelId));
                    break;
                case 7:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "安全维护","",flywheelId));
                    break;
                case 8:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "卸载静态测试","",flywheelId));
                    break;
                case 9:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "电控较旋变","",flywheelId));
                    break;
                case 10:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "轴承磨合测试","",flywheelId));
                    break;
                case 11:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "振动扫描测试","",flywheelId));
                    break;
                case 12:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "轴承拉伸测试","",flywheelId));
                    break;
                default:
                    listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "系统工作状态", "无效状态码","",flywheelId));
            }

        //40024SCU故障等级0~3
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"SCU故障等级",name + "-SCU",dateParts[23],"/"));


        //40025系统SOC0.0~100.0
        double SOC = dateParts[24]/10.0;
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"系统SOC",name + "-SCU",SOC,"%"));


        //40026系统容量预计可能放多少度电
        double capacity = dateParts[25]/10.0;
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"系统容量",name + "-SCU",capacity,"kw.H"));

        //40027系统可放电功率0.0~1000.0
        double capableOfDischargingPower = dateParts[26]/10.0;
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"系统可放电功率",name + "-SCU",capableOfDischargingPower,"kw.H"));

        //40028系统可冲电功率0.0~1000.0
        double washablePower = dateParts[27]/10;
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"系统可充电功率",name + "-SCU",washablePower,"kw.H"));

        //40029-40030总充电量

        int lowLevelTotalChargingCapacity = dateParts[28];
        int highLevelTotalChargingCapacity = dateParts[29];
        long result40029 = combineHighLow(highLevelTotalChargingCapacity, lowLevelTotalChargingCapacity);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"总充电量",name + "-SCU",result40029,"kw.H"));

        //40031-40032总放电量
        int lowLevelTotalDischargeCapacity = dateParts[30];
        int highLevelTotalDischargeCapacity = dateParts[31] ;
        long result40031 = combineHighLow(highLevelTotalDischargeCapacity, lowLevelTotalDischargeCapacity);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"总放电量",name + "-SCU",result40031,"kw.H"));

        //40033飞轮系统可充放电标志
        int status40033 = dateParts[32];
        if ((status40033 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "飞轮系统可充放电标志", "可充标志位","充电标准",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "飞轮系统可充放电标志", "不可充电","充电标准",flywheelId));
        }
        if ((status40033 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "飞轮系统可充放电标志", "可放标志位","放电标志",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "飞轮系统可充放电标志", "不可放电","放电标志",flywheelId));
        }

        //40034-40035飞轮运行时间
        int lowRunningTimeOfFlywheel = dateParts[33];
        int highFlywheelRunningTime = dateParts[34];
        long result40034 = combineHighLow(highFlywheelRunningTime, lowRunningTimeOfFlywheel);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"飞轮运行时间",name + "-SCU",result40034,"S"));

        //40036飞轮运行天数
        int flywheelOperationDays = dateParts[35]/(24*3600);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"飞轮运行天数",name + "-SCU",flywheelOperationDays,"D"));

        //40037-40038充电计数
        int lowChargingCount = dateParts[36];
        int chargingCountHigh = dateParts[37] ;
        long result40027 = combineHighLow(chargingCountHigh, lowChargingCount);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"充电计数",name + "-SCU",result40027,""));

        //40039-40040放电计数
        int lowDischargeCount = dateParts[38];
        int highDischargeCount = dateParts[39] ;
        long result40039 = combineHighLow(highDischargeCount, lowDischargeCount);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"放电计数",name + "-SCU",result40039,""));

        //40041SCU故障1（按位解析）
        int status40041 = dateParts[40];
        if (status40041 == 0) {
        } else {
            if ((status40041 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "辅助回路进线开关K1异常断开", "SCU故障"));
            }
            if ((status40041 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "防雷器故障", "SCU故障"));
            }
            if ((status40041 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "坑道内部水浸告警", "SCU故障"));
            }
            if ((status40041 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "功率柜系统故障", "SCU故障"));
            }
            if ((status40041 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "空调1故障", "SCU故障"));
            }
            if ((status40041 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "空调2故障", "SCU故障"));
            }
            if ((status40041 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "远程三级故障", "SCU故障"));
            }
            if ((status40041 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "电源1故障", "SCU故障"));
            }
            if ((status40041 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "电源2故障", "SCU故障"));
            }
            if ((status40041 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "电源3故障", "SCU故障"));
            }
            if ((status40041 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障1（按位解析）", "电源4故障", "SCU故障"));
            }
        }


        //40042SCU故障2（按位解析）
        int status40042 = dateParts[41];
        if (status40042 == 0) {
        } else {
            if ((status40042 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "驱动1组上电失败故障", "SCU故障"));
            }
            if ((status40042 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "驱动1组线圈1电流传感器失效", "SCU故障"));
            }
            if ((status40042 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "驱动1组线圈2电流传感器失效", "SCU故障"));
            }
            if ((status40042 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "驱动1组线圈总电流传感器失效", "SCU故障"));
            }
            if ((status40042 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "下力欠载", "SCU故障"));
            }
            if ((status40042 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "上力过载", "SCU故障"));
            }
            if ((status40042 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "下力过载 ", "SCU故障"));
            }
            if ((status40042 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "上力1传感器失效", "SCU故障"));
            }
            if ((status40042 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "上力2传感器失效", "SCU故障"));
            }
            if ((status40042 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "下力1传感器失效", "SCU故障"));
            }
            if ((status40042 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "下力2传感器失效 ", "SCU故障"));
            }
            if ((status40042 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "DC24V过压 ", "SCU故障"));
            }
            if ((status40042 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-SCU", "SCU故障2（按位解析）", "DC24V欠压  ", "SCU故障"));
            }
        }

        //40043电气开关状态（按位解析）
        int status40043 = dateParts[42];
        if ((status40043 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "电气开关状态（按位解析）", "闭合","真空泵1控制开关状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "电气开关状态（按位解析）", "断开","真空泵1控制开关状态",flywheelId));
        }
        if ((status40043 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "电气开关状态（按位解析）", "闭合","真空泵2控制开关状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "电气开关状态（按位解析）", "断开","真空泵2控制开关状态",flywheelId));
        }
        if ((status40043 & 0x0004) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "电气开关状态（按位解析）", "闭合","卸载备用电源开关状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "电气开关状态（按位解析）", "断开","卸载备用电源开关状态",flywheelId));
        }
        if ((status40043 & 0x0008) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU", "电气开关状态（按位解析）", "闭合","制动电阻控制开关状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "电气开关状态（按位解析）", "断开","制动电阻控制开关状态",flywheelId));
        }
        //40044通信模式反馈
        String communicationModeFeedback = "未检测";
        if (dateParts[43] == 0) {
            communicationModeFeedback = "本地模式";
        } else if (dateParts[43] == 1) {
            communicationModeFeedback = "远程模式";
        } else {
            communicationModeFeedback = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "通信模式反馈", communicationModeFeedback, "",flywheelId));

        // 40045 电机控制模式反馈
        String motorControlModeFeedback = "未检测";
        if (dateParts[44] == 0) {
            motorControlModeFeedback = "默认";
        } else if (dateParts[44] == 1) {
            motorControlModeFeedback = "电流源模式";
        } else if (dateParts[44] == 2) {
            motorControlModeFeedback = "电压源模式";
        } else {
            motorControlModeFeedback = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "电机控制模式反馈", motorControlModeFeedback, "",flywheelId));

        // 40046 制动电阻投切请求信号
        String brakingResistorRequestSignal = "未检测";
        if (dateParts[45] == 0) {
            brakingResistorRequestSignal = "请求投切";
        } else if (dateParts[45] == 1) {
            brakingResistorRequestSignal = "不投切";
        } else {
            brakingResistorRequestSignal = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU", "制动电阻投切请求信号", brakingResistorRequestSignal, "",flywheelId));
        //40047-40050备用

       //40051驱动1组工作模式
        int code51 = dateParts[50];
        switch (code51) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动1组工作模式", "停机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动1组工作模式", "开环占空比  ","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动1组工作模式", "电流闭环","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动1组工作模式", "力闭环  ","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动1组工作模式", "位移闭环","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动1组工作模式", "无效状态码","",flywheelId));
        }

        // 40052 驱动1组运行状态
        String drive1Status = "未检测";
        if (dateParts[51] == 0) {
            drive1Status = "停机";
        } else if (dateParts[51] == 1) {
            drive1Status = "运行";
        } else {
            drive1Status = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-磁轴承控制器", "驱动1组运行状态", drive1Status, "",flywheelId));

// 40053 驱动1组母线电压1
        double drive1BusVoltage1 = dateParts[52] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动1组母线电压1", name + "-磁轴承控制器", drive1BusVoltage1, "V"));

// 40054 驱动1组母线电压2
        double drive1BusVoltage2 = dateParts[53] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动1组母线电压2", name + "-磁轴承控制器", drive1BusVoltage2, "V"));

// 40055 驱动1组线圈总电流
        double drive1TotalCurrent = dateParts[54] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动1组线圈总电流", name + "-磁轴承控制器", drive1TotalCurrent, "A"));

// 40056 驱动1组线圈电流1
        double drive1CoilCurrent1 = dateParts[55] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动1组线圈电流1", name + "-磁轴承控制器", drive1CoilCurrent1, "A"));

// 40057 驱动1组线圈电流2
        double drive1CoilCurrent2 = dateParts[56] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动1组线圈电流2", name + "-磁轴承控制器", drive1CoilCurrent2, "A"));

// 40058 驱动1组输出占空比
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动1组输出占空比", name + "-磁轴承控制器", dateParts[57], ""));

        //40059驱动2组工作模式
        int code59 = dateParts[58];
        switch (code59) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动2组工作模式", "停机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动2组工作模式", "开环占空比  ","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动2组工作模式", "电流闭环","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动2组工作模式", "力闭环  ","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动2组工作模式", "位移闭环","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-磁轴承控制器", "驱动2组工作模式", "无效状态码","",flywheelId));
        }

        // 40060 驱动2组运行状态
        String drive2Status = "未检测";
        if (dateParts[59] == 0) {
            drive2Status = "停机";
        } else if (dateParts[59] == 1) {
            drive2Status = "运行";
        } else {
            drive2Status = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-磁轴承控制器", "驱动2组运行状态", drive2Status, "",flywheelId));

        // 40061 驱动2组母线电压1
        double drive2BusVoltage1 = dateParts[60] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动2组母线电压1", name + "-磁轴承控制器", drive2BusVoltage1, "V"));

        // 40062 驱动2组母线电压2
        double drive2BusVoltage2 = dateParts[61] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动2组母线电压2", name + "-磁轴承控制器", drive2BusVoltage2, "V"));

        // 40063 驱动2组线圈总电流
        double drive2TotalCurrent = dateParts[62] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动2组线圈总电流", name + "-磁轴承控制器", drive2TotalCurrent, "A"));

        // 40064 驱动2组线圈电流1
        double drive2CoilCurrent1 = dateParts[63] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动2组线圈电流1", name + "-磁轴承控制器", drive2CoilCurrent1, "A"));

        // 40065 驱动2组线圈电流2
        double drive2CoilCurrent2 = dateParts[64] / 10.0;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "驱动2组线圈电流2", name + "-磁轴承控制器", drive2CoilCurrent2, "A"));

        // 40066 驱动2组输出占空比
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "40066驱动2组输出占空比", name + "-磁轴承控制器", dateParts[65], "/"));

        // 40067 上端径向位移1
        double upperRadialDisplacement1 = dateParts[66];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上端径向位移1", name + "-磁轴承控制器", upperRadialDisplacement1, "um"));

        // 40068 上端径向位移2
        double upperRadialDisplacement2 = dateParts[67];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上端径向位移2", name + "-磁轴承控制器", upperRadialDisplacement2, "um"));

        // 40069 下端径向位移1
        double lowerRadialDisplacement1 = dateParts[68];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下端径向位移1", name + "-磁轴承控制器", lowerRadialDisplacement1, "um"));

        // 40070 下端径向位移2
        double lowerRadialDisplacement2 = dateParts[69];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下端径向位移2", name + "-磁轴承控制器", lowerRadialDisplacement2, "um"));

        // 40071 上端轴向位移1
        double upperAxialDisplacement1 = dateParts[70];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上端轴向位移1", name + "-磁轴承控制器", upperAxialDisplacement1, "um"));

        // 40072 上端轴向位移2
        double upperAxialDisplacement2 = dateParts[71];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上端轴向位移2", name + "-磁轴承控制器", upperAxialDisplacement2, "um"));

        // 40073 下端轴向位移1
        double lowerAxialDisplacement1 = dateParts[72];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下端轴向位移1", name + "-磁轴承控制器", lowerAxialDisplacement1, "um"));

        // 40074 下端轴向位移2
        double lowerAxialDisplacement2 = dateParts[73];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下端轴向位移2", name + "-磁轴承控制器", lowerAxialDisplacement2, "um"));

        // 40075 下端轴向位移3
        double lowerAxialDisplacement3 = dateParts[74];
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下端轴向位移3", name + "-磁轴承控制器", lowerAxialDisplacement3, "um"));

        // 40076 485合力
        double force485 = dateParts[75] * 10;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "485合力", name + "-磁轴承控制器", force485, "N"));

// 40077 上合力1
        double upperForce1 = dateParts[76] * 10;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上合力1", name + "-磁轴承控制器", upperForce1, "N"));

        // 40078 上合力2
        double upperForce2 = dateParts[77] * 10;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上合力2", name + "-磁轴承控制器", upperForce2, "N"));

        // 40079 下合力1
        double lowerForce1 = dateParts[78] * 10;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下合力1", name + "-磁轴承控制器", lowerForce1, "N"));

        // 40080 上磁轴承温度1
        double upperMagneticBearingTemp1 = dateParts[79] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上磁轴承温度1", name + "-磁轴承控制器", upperMagneticBearingTemp1, "℃"));

        // 40081 下磁轴承温度1
        double lowerMagneticBearingTemp1 = dateParts[80] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下磁轴承温度1", name + "-磁轴承控制器", lowerMagneticBearingTemp1, "℃"));

        // 40082 下径位移2传感器温度
        double lowerRadialDisplacementSensorTemp2 = dateParts[81] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下径位移2传感器温度", name + "-磁轴承控制器", lowerRadialDisplacementSensorTemp2, "℃"));

        // 40083 下轴位移2传感器温度
        double lowerAxialDisplacementSensorTemp2 = dateParts[82] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下轴位移2传感器温度", name + "-磁轴承控制器", lowerAxialDisplacementSensorTemp2, "℃"));

        // 40084 上机械轴承温度1
        double upperMechanicalBearingTemp1 = dateParts[83] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上机械轴承温度1", name + "-磁轴承控制器", upperMechanicalBearingTemp1, "℃"));

        // 40085 上机械轴承温度2
        double upperMechanicalBearingTemp2 = dateParts[84] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上机械轴承温度2", name + "-磁轴承控制器", upperMechanicalBearingTemp2, "℃"));

        // 40086 下机械轴承温度2
        double lowerMechanicalBearingTemp2 = dateParts[85] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下机械轴承温度2", name + "-磁轴承控制器", lowerMechanicalBearingTemp2, "℃"));
        // 40087 下机械轴承温度1
        double lowerMechanicalBearingTemp1 = dateParts[86] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "下机械轴承温度1", name + "-磁轴承控制器", lowerMechanicalBearingTemp1, "℃"));
    // 40088 控制器温度1
        double controllerTemp1 = dateParts[87] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "控制器温度1(磁轴承控制器)", name + "-磁轴承控制器", controllerTemp1, "℃"));
    // 40089 控制器温度2
        double controllerTemp2 = dateParts[88] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "控制器温度2(磁轴承控制器)", name + "-磁轴承控制器", controllerTemp2, "℃"));
    // 40090 红外温度1
        double infraredTemp1 = dateParts[89] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "红外温度1", name + "-磁轴承控制器", infraredTemp1, "℃"));
    // 40091 真空度1
        double vacuum1 = dateParts[90] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "真空度1", name + "-磁轴承控制器", vacuum1, "Pa"));
    // 40092 加速度信息1
        double accelerationInfo1 = dateParts[91] * 0.01;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "加速度信息1", name + "-磁轴承控制器", accelerationInfo1, "g"));
    // 40093 加速度信息2
        double accelerationInfo2 = dateParts[92] * 0.01;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "加速度信息2", name + "-磁轴承控制器", accelerationInfo2, "g"));
    // 40094 加速度信息3
        double accelerationInfo3 = dateParts[93] * 0.01;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "加速度信息3", name + "-磁轴承控制器", accelerationInfo3, "g"));;

        //40095软件版本
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"软件版本",name + "-磁轴承控制器",dateParts[94],"/"));

        //40096故障等级
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"故障等级",name + "-磁轴承控制器",dateParts[95],"/"));
        //40097故障码1（按位解析）
        int status40097 = dateParts[96];
        if (status40097 == 0) {
            System.out.println(name + "磁轴承控制器故障码1状态正常");
        } else {
            if ((status40097 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线1过压", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线1欠压", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线2过压", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线2欠压", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组线圈总过流", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组线圈1过流 ", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组线圈2过流", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线1过流", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线2过流", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线1电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组母线2电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组线圈1电流零飘超限  ", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组线圈2电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组线圈总电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40097 & 0x8000) != 0) {  // 检查第15位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码1（按位解析）", "驱动1组驱动故障  ", "磁轴承控制器故障"));
            }
        }


        //40098故障码2（按位解析）
        int status40098 = dateParts[97];
        if (status40098 == 0) {
            System.out.println(name + "磁轴承控制器故障码2状态正常");
        } else {
            if ((status40098 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "驱动1组上电失败故障", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "驱动1组线圈1电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "驱动1组线圈2电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "驱动1组线圈总电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "下力欠载", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "上力过载", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "下力过载 ", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "上力1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "上力2传感器失效", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "下力1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "下力2传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "DC24V过压 ", "磁轴承控制器故障"));
            }
            if ((status40098 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码2（按位解析）", "DC24V欠压  ", "磁轴承控制器故障"));
            }
        }

        //40099故障码3（按位解析）
        int status40099 = dateParts[98];
        if (status40099 == 0) {
            System.out.println(name + "磁轴承控制器故障码3状态正常");
        } else {
            if ((status40099 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "上径向位移1超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "上径向位移2超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "位移3超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "下径向位移1超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "下径向位移2超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "位移6超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "上轴向位移1超限 ", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "上轴向位移2超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "位移9超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "下轴向位移1超限", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "下轴向位移2超限 ", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "下轴向位移3超限 ", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "位移13超限  ", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "位移14超限 ", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "真空泄露 ", "磁轴承控制器故障"));
            }
            if ((status40099 & 0x8000) != 0) {  // 检查第15位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码3（按位解析）", "真空计失效  ", "磁轴承控制器故障"));
            }
        }

        //40100故障码4（按位解析）
        int status40100 = dateParts[99];
        if (status40100 == 0) {
            System.out.println(name + "磁轴承控制器故障码4状态正常");
        } else {
            if ((status40100 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "上径向位移1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "上径向位移2传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "位移3传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "下径向位移1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "下径向位移2传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "位移6传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "上轴向位移1传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "上轴向位移2传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "位移9传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "下轴向位移1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "下轴向位移2传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "下轴向位移3传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "位移13传感器失效  ", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "位移14传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "RS485通信1故障 ", "磁轴承控制器故障"));
            }
            if ((status40100 & 0x8000) != 0) {  // 检查第15位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码4（按位解析）", "RS485通信2故障  ", "磁轴承控制器故障"));
            }
        }
        //将数据保存到redis
        String redisKey = RedisKeyUtil.getRedisKey(matrixId, flyWheelSerial);
        redisUtils.saveMap(redisKey, "100", list);

        //将数据保存至mysql
        ((FlywheelDataAnalysisServiceImpl) AopContext.currentProxy()).saveDate(list, listStatus, listAlert, sum_site, sub_site, flyWheelSerial);

    }

    private FlywheelStatusAnalysis statusInsert(String datetimeStr, String sum_site, String sub_site, String device_name, String status_name, String status_value, String status_byte_name,String flywheel_id) {
        FlywheelStatusAnalysis flywheelStatusAnalysis = new FlywheelStatusAnalysis();
        flywheelStatusAnalysis.setTime(datetimeStr);
        flywheelStatusAnalysis.setSum_site(sum_site);
        flywheelStatusAnalysis.setSub_site(sub_site);
        flywheelStatusAnalysis.setDevice_name(device_name);
        flywheelStatusAnalysis.setStatus_name(status_name);
        flywheelStatusAnalysis.setStatus_value(status_value);
        flywheelStatusAnalysis.setStatus_byte_name(status_byte_name);
        flywheelStatusAnalysis.setFlywheel_id(flywheel_id);
        return  flywheelStatusAnalysis;
    }

    private FlywheelAlertAnalysis alertInsert(String datetimeStr, String sum_site, String sub_site, String flywheel_id, String device_name, String alert_name, String alert_value, String alert_level) {
        FlywheelAlertAnalysis flywheelAlertAnalysis = new FlywheelAlertAnalysis();
        flywheelAlertAnalysis.setTime(datetimeStr);
        flywheelAlertAnalysis.setSum_site(sum_site);
        flywheelAlertAnalysis.setSub_site(sub_site);
        flywheelAlertAnalysis.setFlywheel_id(flywheel_id);
        flywheelAlertAnalysis.setDevice_name(device_name);
        flywheelAlertAnalysis.setAlert_name(alert_name);
        flywheelAlertAnalysis.setAlert_value(alert_value);
        flywheelAlertAnalysis.setAlert_level(alert_level);
        return flywheelAlertAnalysis;
    }

    private FlywheelDataAnalysis TestInsert(String datetimeStr, String sum_site, String sub_site,  String device_name,String data_name, double datePart, String unit) {
        FlywheelDataAnalysis flywheelDataAnalysis = new FlywheelDataAnalysis();
        flywheelDataAnalysis.setTime(datetimeStr);
        //获取月份 yyyy-mm
        flywheelDataAnalysis.setMonth(datetimeStr.substring(0, 7));
        flywheelDataAnalysis.setSumSite(sum_site);
        flywheelDataAnalysis.setSubSite(sub_site);
        flywheelDataAnalysis.setDeviceName(device_name);
        flywheelDataAnalysis.setDataName(data_name);
        flywheelDataAnalysis.setDataValue(datePart);
        flywheelDataAnalysis.setUnit(unit);
        return flywheelDataAnalysis;
    }

    public static long combineHighLow(int high, int low) {
        // 1. 输入验证
//        if (high < 0 || high > 0xFFFF || low < 0 || low > 0xFFFF) {
//            log.error("参数错误:high={},low={}", high, low);
//            throw new IllegalArgumentException("参数必须为 0~65535 的正整数");
//        }

        // 2. 高 16 位左移 16 位后与低 16 位合并
        return ((long) high << 16) |  (low & 0xFFFF);
    }


    @Override
    public void flywheel80(byte[] bytes, String name, String sum_site, String sub_site, String flywheelId,int matrixId,int flyWheelSerial) {
        byte[] data = extractSubarray(bytes, 9, 160);
        int[] dateParts = new int[data.length/2];
        for (int i = 0; i < dateParts.length; i++) {
            int pos = i * 2;
            // 将两个字节合并为有符号的short，再转为int自动保留符号
            dateParts[i] = (short) (
                    ((data[pos] & 0xFF) << 8) |
                            (data[pos + 1] & 0xFF)
            );
        }
        String datetimeStr = redisUtils.getString(RedisKeyUtil.getRedisTimeKey());
        List<FlywheelDataAnalysis> list = new ArrayList<>();
        List<FlywheelAlertAnalysis> listAlert = new ArrayList<>();
        List<FlywheelStatusAnalysis> listStatus = new ArrayList<>();
        //40101故障码5（按位解析）
        int status40101 = dateParts[0];
        if (status40101 == 0) {
            System.out.println(name + "磁轴承控制器故障码5状态正常");
        } else {
            if ((status40101 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "下机械轴承温度1超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "上机械轴承温度2超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "下径向位移2传感器温度超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "上机械轴承温度1超限 ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "下轴向位移2传感器温度超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "上轴向位移2传感器温度超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "飞轮壳体温度2超限 ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "上轴向位移2传感器温度超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "上磁轴承温度1超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "上机械轴承温度3超限", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "下磁轴承温度1超限 ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "红外1（测磁钢端面）超限 ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "红外2（测飞轮上端面）超限  ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "红外1传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "红外2传感器失效   ", "磁轴承控制器故障"));
            }
            if ((status40101 & 0x8000) != 0) {  // 检查第15位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码5（按位解析）", "EEPROM故障  ", "磁轴承控制器故障"));
            }
        }

        //40102故障码6（按位解析）
        int status40102 = dateParts[1];
        if (status40102 == 0) {
            System.out.println(name + "磁轴承控制器故障码6状态正常");
        } else {
            if ((status40102 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "下机械轴承温度1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "上机械轴承温度2传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "下径向位移2传感器温度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "上机械轴承温度1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "下轴向位移2传感器温度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "上轴向位移2传感器温度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "飞轮壳体温度2传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "上轴向位移2传感器温度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "上磁轴承温度1传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "上机械轴承温度3传感器失效", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "下磁轴承温度1传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "LMBC1模块1温度超限 ", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "LMBC1模块2温度超限  ", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "LMBC2模块1温度超限 ", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码6（按位解析）", "LMBC2模块2温度超限 ", "磁轴承控制器故障"));
            }
        }

        //40103故障码7（按位解析）
        int status40103 = dateParts[2];

        if (status40103 == 0) {
            System.out.println(name + "磁轴承控制器故障码7状态正常");
        } else {
            if ((status40103 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "A1加速度超限", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "A2加速度超限", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "A3加速度超限", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "A1加速度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "A2加速度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "A3加速度传感器失效", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "水浸1故障 ", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "水浸2故障", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "CANA通信故障", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "CANB通信故障", "磁轴承控制器故障"));
            }
            if ((status40103 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "开环静态参数错误 ", "磁轴承控制器故障"));
            }
            if ((status40102 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "力闭环静态参数错误 ", "磁轴承控制器故障"));
            }
        }


        //40104故障码8（按位解析）
        int status40104 = dateParts[3];
        if (status40104 == 0) {
            System.out.println(name + "磁轴承控制器故障码7状态正常");
        } else {
            if ((status40104 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线1过压", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线1欠压", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线2过压", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线2欠压", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组线圈总过流", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组线圈1过流", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组线圈2过流 ", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线1过流", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线2过流", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线1电流零飘超限", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组母线2电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组线圈1电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组线圈2电流零飘超限  ", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组线圈总电流零飘超限 ", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组驱动故障 ", "磁轴承控制器故障"));
            }
            if ((status40104 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码7（按位解析）", "驱动2组上电失败故障 ", "磁轴承控制器故障"));
            }
        }


        //40105故障码9（按位解析）
        int status40105 = dateParts[4];
        if (status40105 == 0) {
            System.out.println(name + "磁轴承控制器故障码8状态正常");
        } else {
            if ((status40105 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "驱动2组线圈1电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0002) != 0) {  // 检查第1位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "驱动2组线圈2电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0004) != 0) {  // 检查第2位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "驱动2组线圈总电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "上机械轴承温度3温升过大", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "上机械轴承温度2温升过大", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "下机械轴承温度1温升过大", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "上机械轴承温度1温升过大 ", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "驱动1组多个电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "驱动2组多个电流传感器失效", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "上径位移多个传感器失效", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "下径位移多个传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "下轴位移多个传感器失效 ", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "位移保护触发  ", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "阶梯限流触发 ", "磁轴承控制器故障"));
            }
            if ((status40105 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-磁轴承控制器", "故障码8（按位解析）", "轴承卡滞故障 ", "磁轴承控制器故障"));
            }
        }

// 40106 上径位移2传感器温度
        double upperRadialDisplacementSensorTemp2 = dateParts[5] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上径位移2传感器温度", name + "-磁轴承控制器", upperRadialDisplacementSensorTemp2, "/"));

// 40107 上轴位移2传感器温度
        double upperAxialDisplacementSensorTemp2 = dateParts[6] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "上轴位移2传感器温度", name + "-磁轴承控制器", upperAxialDisplacementSensorTemp2, "/"));

// 40108 红外温度2
        double infraredTemp2 = dateParts[7] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "红外温度2", name + "-磁轴承控制器", infraredTemp2, "/"));

// 40109 真空度2
        double vacuum2 = dateParts[8] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "真空度2", name + "-磁轴承控制器", vacuum2, "/"));

// 40110 转子温度位移推算值
        double rotorTemperatureDisplacementEstimated = dateParts[9] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "转子温度位移推算值", name + "-磁轴承控制器", rotorTemperatureDisplacementEstimated, "/"));

        //40111电机运行状态（按位解析）
        int status40111 = dateParts[4];
        if ((status40111 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "使能","PWM使能状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-电机控制器", "电机工作状态", "未使能","PWM使能状态",flywheelId));
        }
        if ((status40111 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "电机故障","电机故障状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-电机控制器", "电机工作状态", "点击无故障","电机故障状态",flywheelId));
        }
        if ((status40111 & 0x0004) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "上高压","上高压状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-电机控制器", "电机工作状态", "未上高压","上高压状态",flywheelId));
        }
        if ((status40111 & 0x0008) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "完成","参数辨识完成",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-电机控制器", "电机工作状态", "未完成","参数辨识完成",flywheelId));
        }

        //40112电机工作状态
        int code = dateParts[11];
        switch (code) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "上电初始化","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "准备就绪  ","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "待机","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "恒转速  ","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "恒转矩加速","",flywheelId));
                break;
            case 5:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "恒转矩减速  ","",flywheelId));
                break;
            case 6:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "恒功率加速","",flywheelId));
                break;
            case 7:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "恒功率减速  ","",flywheelId));
                break;
            case 8:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "恒电压","",flywheelId));
                break;
            case 9:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "自由停机","",flywheelId));
                break;
            case 10:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "下电  ","",flywheelId));
                break;
            case 11:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "参数辨识","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-电机控制器", "电机工作状态", "无效状态码","",flywheelId));
        }

        //40113故障信息1（按位解析）
        int status40113 = dateParts[12];
        if (status40113 == 0) {
            System.out.println(name + "电机控制器故障信息1状态正常");
        } else {
            if ((status40113 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "电机反转", "电机控制器"));
            }
            if ((status40113 & 0x0002) != 0) {  // 检查第1位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "母线过流", "电机控制器"));
            }
            if ((status40113 & 0x0004) != 0) {  // 检查第2位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "母线过压", "电机控制器"));
            }
            if ((status40113 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "母线欠压", "电机控制器"));
            }
            if ((status40113 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "控制器电流过流", "电机控制器"));
            }
            if ((status40113 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "控制器I2t过流", "电机控制器"));
            }
            if ((status40113 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "硬件过流 ", "电机控制器"));
            }
            if ((status40113 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "电机过温", "电机控制器"));
            }
            if ((status40113 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "控制器过温", "电机控制器"));
            }
            if ((status40113 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "通信中断", "电机控制器"));
            }
            if ((status40113 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "电机堵转 ", "电机控制器"));
            }
            if ((status40113 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "旋变故障 ", "电机控制器"));
            }
            if ((status40113 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "电流传感器故障  ", "电机控制器"));
            }
            if ((status40113 & 0x2000) != 0) {  // 检查第13位（0x2000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "功率管故障 ", "电机控制器"));
            }
            if ((status40113 & 0x4000) != 0) {  // 检查第14位（0x4000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "电流不平衡 ", "电机控制器"));
            }
            if ((status40113 & 0x8000) != 0) {  // 检查第15位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-电机控制器", "故障信息1（按位解析）", "超速故障 ", "电机控制器"));
            }
        }

        //40114电机故障信息2
        System.out.println("40114电机故障信息2: " + dateParts[13]);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"电机故障信息2",name + "-电机控制器",dateParts[13],""));

        // 40115 母线电压
        double busVoltage = dateParts[14] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线电压", name + "-电机控制器", busVoltage, "V"));

// 40116 转速
        double speed = dateParts[15] * 1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "转速", name + "-电机控制器", speed, "rps"));

// 40117 相电流有效值
        double phaseCurrentRms = dateParts[16] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "相电流有效值", name + "-电机控制器", phaseCurrentRms, "A"));

// 40118 电机输出扭矩
        double motorTorque = dateParts[17] * 1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电机输出扭矩", name + "-电机控制器", motorTorque, "N"));

// 40119 电机输出功率
        double motorPower = dateParts[18] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电机输出功率", name + "-电机控制器", motorPower, "KW"));

// 40120 旋变角度
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "旋变角度", name + "-电机控制器", dateParts[19], "/"));

// 40121 控制器温度1
        double controllerTemp1 = dateParts[20] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "控制器温度1(电机控制器)", name + "-电机控制器", controllerTemp1, "℃"));

// 40122 控制器温度2
        double controllerTemp2 = dateParts[21] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "控制器温度2(电机控制器)", name + "-电机控制器", controllerTemp2, "℃"));

// 40123 电机温度1
        double motorTemp1 = dateParts[22] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电机温度1", name + "-电机控制器", motorTemp1, "℃"));

// 40124 电机温度2
        double motorTemp2 = dateParts[23] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电机温度2", name + "-电机控制器", motorTemp2, "℃"));

        //40125控制器软件版本
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"控制器软件版本",name + "-电机控制器",dateParts[24],"/"));


        //40126变频器型号
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"变频器型号",name + "-电机控制器",dateParts[25],"/"));

        //40127最大工作转速
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"最大工作转速",name + "-电机控制器",dateParts[26],"/"));

        //40128最小工作转速
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"最小工作转速",name + "-电机控制器",dateParts[27],"/"));

        //40129备用

        //40130备用

        //40131柜内环境温度
        double environmentalTemperatureInsideTheCabinet = dateParts[30]*0.1;
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"柜内环境温度",name + "-电机控制器",environmentalTemperatureInsideTheCabinet,"℃"));

        //40132辅助设备状态（按位解析）
        int status40132 = dateParts[31];
        if ((status40132 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "空调运行状态", "运行","空调1运行状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU辅助设备", "空调运行状态", "停止","空调1运行状态",flywheelId));
        }
        if ((status40132 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "空调运行状态", "运行","空调2运行状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU辅助设备", "空调运行状态", "停止","空调2运行状态",flywheelId));
        }

        //40133辅助设备告警（按位解析）
        int status40133 = dateParts[32];
        if ((status40133 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "空调运行状态", "故障","空调1是否故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU辅助设备", "空调运行状态", "正常","空调1是否故障",flywheelId));
        }
        if ((status40133 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "空调运行状态", "故障","空调2是否故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-SCU辅助设备", "空调运行状态", "正常","空调2是否故障",flywheelId));
        }
        //40134卸载参数辨识状态
        int code1 = dateParts[33];
        switch (code1) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "未进行参数辨识", "停机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "正在进行参数辨识", "开环占空比  ","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "参数辨识完成", "电流闭环","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-SCU辅助设备", "卸载参数辨识状态", "无效状态码","",flywheelId));
        }
        //将数据保存到redis
        String redisKey = RedisKeyUtil.getRedisKey(matrixId, flyWheelSerial);
        redisUtils.saveMap(redisKey, "80", list);

         //将数据保存到mysql
        ((FlywheelDataAnalysisServiceImpl) AopContext.currentProxy()).saveDate(list, listStatus, listAlert, sum_site, sub_site, flyWheelSerial);
    }

    @Override
    public void flywheel98(byte[] bytes, String name, String sum_site, String sub_site,String flywheelId) {
        byte[] data = extractSubarray(bytes, 9, 196);
        int[] dateParts = new int[data.length/2];
        for (int i = 0; i < dateParts.length; i++) {
            int pos = i * 2;
            // 将两个字节合并为有符号的short，再转为int自动保留符号
            dateParts[i] = (short) (
                    ((data[pos] & 0xFF) << 8) |
                            (data[pos + 1] & 0xFF)
            );
        }
        List<FlywheelDataAnalysis> list = new ArrayList<>();
        List<FlywheelAlertAnalysis> listAlert = new ArrayList<>();
        List<FlywheelStatusAnalysis> listStatus = new ArrayList<>();
        String datetimeStr = redisUtils.getString(RedisKeyUtil.getRedisTimeKey());

        Map map = new HashMap();
        // 80801 通信模式总控制
        String communicationModeControl = "未检测";
        if (dateParts[0] == 0) {
            communicationModeControl = "本地模式";
        } else if (dateParts[0] == 1) {
            communicationModeControl = "EMS远程模式";
        } else {
            communicationModeControl = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "通信模式总控制", communicationModeControl, "",flywheelId));

// 80802 自动/手动控制切换（测试使用）
        String controlSwitch = "未检测";
        if (dateParts[1] == 0) {
            controlSwitch = "自动模式";
        } else if (dateParts[1] == 1) {
            controlSwitch = "手动模式";
        } else {
            controlSwitch = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "自动/手动控制切换", controlSwitch, "",flywheelId));

// 80803 pcs总功率设定值（预留）
        double pcsTotalPowerSetpoint = dateParts[2] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "pcs总功率设定值", name + "-总控制状态", pcsTotalPowerSetpoint, "KW"));

// 80804 制动电阻投切控制1
        String brakingResistorControl1 = "未检测";
        if (dateParts[3] == 0) {
            brakingResistorControl1 = "不投切";
        } else if (dateParts[3] == 1) {
            brakingResistorControl1 = "投切";
        } else {
            brakingResistorControl1 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "制动电阻投切控制1", brakingResistorControl1, "",flywheelId));

// 80805 制动电阻投切控制2
        String brakingResistorControl2 = "未检测";
        if (dateParts[4] == 0) {
            brakingResistorControl2 = "不投切";
        } else if (dateParts[4] == 1) {
            brakingResistorControl2 = "投切";
        } else {
            brakingResistorControl2 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "制动电阻投切控制2", brakingResistorControl2, "",flywheelId));

// 80806 制动电阻投切控制3
        String brakingResistorControl3 = "未检测";
        if (dateParts[5] == 0) {
            brakingResistorControl3 = "不投切";
        } else if (dateParts[5] == 1) {
            brakingResistorControl3 = "投切";
        } else {
            brakingResistorControl3 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "制动电阻投切控制3", brakingResistorControl3, "",flywheelId));

// 80807 制动电阻投切控制4
        String brakingResistorControl4 = "未检测";
        if (dateParts[6] == 0) {
            brakingResistorControl4 = "不投切";
        } else if (dateParts[6] == 1) {
            brakingResistorControl4 = "投切";
        } else {
            brakingResistorControl4 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "制动电阻投切控制4", brakingResistorControl4, "",flywheelId));

// 80808 PCS启停
        String pcsStartStop = "未检测";
        if (dateParts[7] == 0) {
            pcsStartStop = "停机";
        } else if (dateParts[7] == 1) {
            pcsStartStop = "运行";
        } else {
            pcsStartStop = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "PCS启停", pcsStartStop, "",flywheelId));

// 80809 pcs功率设置
        double pcsPowerSetpoint = dateParts[8] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "pcs功率设置", name + "-总控制状态", pcsPowerSetpoint, ""));

// 80810 PCSkm开合
        String pcsKmOpenClose = "未检测";
        if (dateParts[9] == 0) {
            pcsKmOpenClose = "断开";
        } else if (dateParts[9] == 1) {
            pcsKmOpenClose = "闭合";
        } else {
            pcsKmOpenClose = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "PCSkm开合", pcsKmOpenClose, "",flywheelId));

// 80811 PCS开关机设置（测试使用）
        String pcsOnOffSetting = "未检测";
        if (dateParts[10] == 21930) {
            pcsOnOffSetting = "停机";
        } else if (dateParts[10] == 43605) {
            pcsOnOffSetting = "开机";
        } else {
            pcsOnOffSetting = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "PCS开关机设置", pcsOnOffSetting, "",flywheelId));

// 80812 运行模式设置（测试使用）
        String operationModeSetting = "未检测";
        if (dateParts[11] == 4369) {
            operationModeSetting = "PQ模式";
        } else if (dateParts[11] == 8738) {
            operationModeSetting = "VF模式";
        } else if (dateParts[11] == 17476) {
            operationModeSetting = "VI模式";
        } else {
            operationModeSetting = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "运行模式设置", operationModeSetting, "",flywheelId));

// 80813 最大可充功率设置（测试使用）
        double maxChargePowerSetting = dateParts[12] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "最大可充功率设置", name + "-总控制状态", maxChargePowerSetting, "KW"));

// 80814 最大可放功率设置（测试使用）
        double maxDischargePowerSetting = dateParts[13] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "最大可放功率设置", name + "-总控制状态", maxDischargePowerSetting, "KW"));

// 80815 FMS故障清除
        String fmsFaultClear = "未检测";
        if (dateParts[14] == 1) {
            fmsFaultClear = "故障复位";
        } else if (dateParts[14] == 0) {
            fmsFaultClear = "无动作";
        } else {
            fmsFaultClear = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-总控制状态", "FMS故障清除", fmsFaultClear, "",flywheelId));

        //80816 预留
        map.put("80816 预留","预留");

        //80817 预留
        map.put("80817 预留","预留");

        //80818 FMS模式切换
        int code = dateParts[17];
        switch (code) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换 ", "对拖模式","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换", "恒转速模式  ","",flywheelId));
                break;
            case 11:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换", "卸载静态测试","",flywheelId));
                break;
            case 12:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换 ", "电控较旋变","",flywheelId));
                break;
            case 13:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换", "轴承磨合测试  ","",flywheelId));
                break;
            case 14:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换", "振动扫描测试","",flywheelId));
                break;
            case 15:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换", "轴承拉伸测试","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-总控制状态", "FMS模式切换", "无效状态码","",flywheelId));
        }

        //80819 预留
        map.put("80819 预留","预留");

        //80820 预留
        map.put("80820 预留","预留");

        //80821 FMS序列号
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"FMS序列号",name + "-总控制状态",dateParts[20],""));

        //80822 FMS故障等级
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"FMS故障等级",name + "-总控制状态",dateParts[21],""));

        //80823 辅助设备状态
        int status80823 = dateParts[22];
        StringBuilder sb = new StringBuilder();
        sb.append(String.format("bit0~1:  %s\n", getAirConStatus((status80823 >> 0) & 0x3, "空调1")));
        sb.append(String.format("bit2~3:  %s\n", getAirConStatus((status80823 >> 2) & 0x3, "空调2")));
        sb.append(String.format("bit4~5:  %s\n", getAirConStatus((status80823 >> 4) & 0x3, "空调3")));
        sb.append(String.format("bit6~7:  %s\n", getUPSStatus((status80823 >> 6) & 0x3, "UPS1")));
        sb.append(String.format("bit8~9:  %s\n", getUPSStatus((status80823 >> 8) & 0x3, "UPS2")));
        sb.append(String.format("bit10:   %s\n", (status80823 & 0x0400) != 0 ? "1：SCU1通信故障" : "0：SCU1通信正常"));
        sb.append(String.format("bit11:   %s\n", (status80823 & 0x0800) != 0 ? "1：SCU2通信故障" : "0：SCU2通信正常"));
        sb.append(String.format("bit12:   %s\n", (status80823 & 0x1000) != 0 ? "1：SCU3通信故障" : "0：SCU3通信正常"));
        sb.append(String.format("bit13:   %s\n", (status80823 & 0x2000) != 0 ? "1：SCU4通信故障" : "0：SCU4通信正常"));
        sb.append(String.format("bit14:   %s\n", (status80823 & 0x4000) != 0 ? "1：PCS1通信故障" : "0：PCS1通信正常"));
        sb.append(String.format("bit15:   %s\n", (status80823 & 0x8000) != 0 ? "1：PCS2通信故障" : "0：PCS2通信正常"));
        System.out.println(sb.toString());
        map.put("80823 辅助设备状态",sb.toString());

        //80824 辅助设备告警（按位解析）
        int status80824 = dateParts[23];
        if (status80824 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80824 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "EMS1通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "EMS2通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "工控机通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "4G模块通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "网口6通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "ULB1通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "ULB2通信故障 ", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "ULB3通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "ULB4通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "MCU1通信故障", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "MCU2通信故障 ", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "MCU3通信故障 ", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "MCU4通信故障  ", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "电阻箱通信故障 ", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "PCS3通信故障 ", "FMS辅助设备故障"));
            }
            if ((status80824 & 0x8000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-FMS辅助设备", "辅助设备告警（按位解析）", "PCS4通信故障 ", "FMS辅助设备故障"));
            }
        }

        //80825 电气开关1
        int status80825 = dateParts[24];
        if ((status80825 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","火灾控制器火灾告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","火灾控制器火灾告警",flywheelId));
        }
        if ((status80825 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","火灾控制器故障告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","火灾控制器故障告警",flywheelId));
        }
        if ((status80825 & 0x0004) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","UPS柜内水浸告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","UPS柜内水浸告警",flywheelId));
        }
        if ((status80825 & 0x0008) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","UPS柜空调告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","UPS柜空调告警",flywheelId));
        }
        if ((status80825 & 0x0010) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","进线断路器K1状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","进线断路器K1状态",flywheelId));
        }
        if ((status80825 & 0x0020) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","防雷器spd1告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","防雷器spd1告警",flywheelId));
        }
        if ((status80825 & 0x0040) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K2",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K2",flywheelId));
        }
        if ((status80825 & 0x0080) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K3",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K3",flywheelId));
        }
        if ((status80825 & 0x0100) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K4",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K4",flywheelId));
        }
        if ((status80825 & 0x0200) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K5",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K5",flywheelId));
        }
        if ((status80825 & 0x0400) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K6",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K6",flywheelId));
        }
        if ((status80825 & 0x0800) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K7",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K7",flywheelId));
        }
        if ((status80825 & 0x1000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K8",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K8",flywheelId));
        }
        if ((status80825 & 0x2000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K9",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K9",flywheelId));
        }
        if ((status80825 & 0x4000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K10",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K10",flywheelId));
        }
        if ((status80825 & 0x8000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关1", "闭合","断路器K11",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关1", "断开","断路器K11",flywheelId));
        }

        //80826 电气开关2
        int status80826 = dateParts[24];
        if ((status80826 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK11",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK11",flywheelId));
        }
        if ((status80826 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK12",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK12",flywheelId));
        }
        if ((status80826 & 0x0004) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK13",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK13",flywheelId));
        }
        if ((status80826 & 0x0008) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK14",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK14",flywheelId));
        }
        if ((status80826 & 0x0010) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK15",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK15",flywheelId));
        }
        if ((status80826 & 0x0020) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK16",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK16",flywheelId));
        }
        if ((status80826 & 0x0040) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","断路器KK17",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","断路器KK17",flywheelId));
        }
        if ((status80826 & 0x0080) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电缆沟内水浸告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电缆沟内水浸告警",flywheelId));
        }
        if ((status80826 & 0x0100) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电池柜空调1告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电池柜空调1告警",flywheelId));
        }
        if ((status80826 & 0x0200) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电池柜空调2告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电池柜空调2告警",flywheelId));
        }
        if ((status80826 & 0x0400) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电池柜故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电池柜故障",flywheelId));
        }
        if ((status80826 & 0x0800) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","远程三级故障告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","远程三级故障告警",flywheelId));
        }
        if ((status80826 & 0x1000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电机变流柜1系统故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电机变流柜1系统故障",flywheelId));
        }
        if ((status80826 & 0x2000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电机变流柜2系统故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电机变流柜2系统故障",flywheelId));
        }
        if ((status80826 & 0x4000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电机变流柜3系统故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电机变流柜3系统故障",flywheelId));
        }
        if ((status80826 & 0x8000) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关2", "闭合","电机变流柜4系统故障 ",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关2", "断开","电机变流柜4系统故障 ",flywheelId));
        }

        // 80827 空调1柜内温度
        double airConditioner1CabinetTemperature = dateParts[26] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "空调1柜内温度", name + "-FMS辅助设备", airConditioner1CabinetTemperature, ""));

// 80828 空调1柜内湿度
        double airConditioner1CabinetHumidity = dateParts[27] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "空调1柜内湿度", name + "-FMS辅助设备", airConditioner1CabinetHumidity, ""));

// 80829 空调2柜内温度
        double airConditioner2CabinetTemperature = dateParts[28] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "空调2柜内温度", name + "-FMS辅助设备", airConditioner2CabinetTemperature, ""));

// 80830 空调2柜内湿度
        double airConditioner2CabinetHumidity = dateParts[29] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "空调2柜内湿度", name + "-FMS辅助设备", airConditioner2CabinetHumidity, ""));

// 80831 冷水机回液温度
        double chillerReturnTemperature = dateParts[30] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "冷水机回液温度", name + "-FMS辅助设备", chillerReturnTemperature, ""));

// 80832 冷水机流量
        double chillerFlow = dateParts[31] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "冷水机流量", name + "-FMS辅助设备", chillerFlow, ""));

// 80833 电阻箱电压1
        double resistorBoxVoltage1 = dateParts[32] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电阻箱电压1", name + "-FMS辅助设备", resistorBoxVoltage1, ""));

// 80834 电阻箱电流1
        double resistorBoxCurrent1 = dateParts[33] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电阻箱电流1", name + "-FMS辅助设备", resistorBoxCurrent1, ""));

// 80835 电阻箱电压2
        double resistorBoxVoltage2 = dateParts[34] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电阻箱电压2", name + "-FMS辅助设备", resistorBoxVoltage2, ""));

// 80836 电阻箱电流2
        double resistorBoxCurrent2 = dateParts[35] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "电阻箱电流2", name + "-FMS辅助设备", resistorBoxCurrent2, ""));
        //80837 电气开关3
        int status80837 = dateParts[36];
        if ((status80837 & 0x0001) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关3", "闭合","电阻箱超温告警",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关3", "断开","电阻箱超温告警",flywheelId));
        }
        if ((status80837 & 0x0002) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关3", "闭合","电阻箱超温卸载",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关3", "断开","电阻箱超温卸载",flywheelId));
        }
        if ((status80837 & 0x0004) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关3", "闭合","电阻箱风机故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关3", "断开","电阻箱风机故障",flywheelId));
        }
        if ((status80837 & 0x0008) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关3", "闭合","电阻箱急停按钮状态",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关3", "断开","电阻箱急停按钮状态",flywheelId));
        }
        if ((status80837 & 0x0010) != 0) {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-FMS辅助设备", "电气开关3", "闭合","电阻箱系统故障",flywheelId));
        }else {
            listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-FMS辅助设备", "电气开关3", "断开","电阻箱系统故障",flywheelId));
        }

        //80838 运行模式
        String runningMode = "未检测";
        if (dateParts[37] == 4369){
            runningMode = "PQ模式 ";
        }else if (dateParts[37] == 8738){
            runningMode = "VF模式 ";
        }else if (dateParts[37] == 17476){
            runningMode = "VI模式";
        }else {
            runningMode = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "运行模式", runningMode,"",flywheelId));

        //80839 状态机值
        int code1 = dateParts[38];
        switch (code1) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "状态机值", "关机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "状态机值", "静置","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "状态机值", "充电","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "状态机值", "放电","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "状态机值", "故障","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS1", "状态机值", "无效码","",flywheelId));
        }

// 80840 母线直流电压
        double busVoltage = dateParts[39] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电压", name + "-PCS1", busVoltage, "V"));

// 80841 母线直流电流
        double busCurrent = dateParts[40] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电流", name + "-PCS1", busCurrent, "A"));

// 80842 母线直流功率
        double busPower = dateParts[41] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流功率", name + "-PCS1", busPower, "KW"));

// 80843 当日充电电量（低字节）80844 当日充电电量（高字节）
        int chargeEnergyLow = dateParts[42];
        int chargeEnergyHigh = dateParts[43];
        long chargeEnergy = combineHighLow(chargeEnergyHigh, chargeEnergyLow);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日充电电量(PSC1)", name + "-PCS1", chargeEnergy, "kw.H"));

// 80845 当日放电电量（低字节）80846 当日放电电量（高字节）
        int dischargeEnergyLow = dateParts[44];
        int dischargeEnergyHigh = dateParts[45];
        long dischargeEnergy = combineHighLow(dischargeEnergyHigh, dischargeEnergyLow);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日放电电量(PSC1)", name + "-PCS1", dischargeEnergy, "kw.H"));

// 80847 总充电电量（低字节）80848 总充电电量（高字节）
        int totalChargeEnergyLow = dateParts[46];
        int totalChargeEnergyHigh = dateParts[47];
        long totalChargeEnergy = combineHighLow(totalChargeEnergyHigh, totalChargeEnergyLow);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "总充电电量(PSC1)", name + "-PCS1", totalChargeEnergy, "kw.H"));

// 80849 总放电电量（低字节）80850 总放电电量（高字节）
        int totalDischargeEnergyLow = dateParts[48];
        int totalDischargeEnergyHigh = dateParts[49];
        long totalDischargeEnergy = combineHighLow(totalDischargeEnergyHigh, totalDischargeEnergyLow);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "总放电电量(PSC1)", name + "-PCS1", totalDischargeEnergy, "kw.H"));

        //80851 运行模式PC2
        String runningMode851 = "未检测";
        if (dateParts[50] == 4369){
            runningMode851 = "PQ模式 ";
        }else if (dateParts[50] == 8738){
            runningMode851 = "VF模式 ";
        }else if (dateParts[50] == 17476){
            runningMode851 = "VI模式";
        }else {
            runningMode851 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "运行模式", runningMode851,"",flywheelId));

        //80852 状态机值PC2
        int code2 = dateParts[51];
        switch (code2) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "状态机值", "关机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "状态机值", "静置","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "状态机值", "充电","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "状态机值", "放电","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "状态机值", "故障","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS2", "状态机值", "无效码","",flywheelId));
        }

// 80853 母线直流电压PC2
        double busVoltagePC2 = dateParts[52] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电压PC2", name + "-PCS2", busVoltagePC2, "V"));

// 80854 母线直流电流PC2
        double busCurrentPC2 = dateParts[53] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电流PC2", name + "-PCS2", busCurrentPC2, "A"));

// 80855 母线直流功率PC2
        double busPowerPC2 = dateParts[54] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流功率PC2", name + "-PCS2", busPowerPC2, "KW"));

// 80856 当日充电电量（低字节）80857 当日充电电量（高字节）
        int chargeEnergyLow856 = dateParts[55];
        int chargeEnergyHigh857 = dateParts[56];
        long chargeEnergy856 = combineHighLow(chargeEnergyHigh857, chargeEnergyLow856);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日充电电量", name + "-PCS2", chargeEnergy856, "kw.H"));

// 80858 当日放电电量（低字节）80859 当日放电电量（高字节）
        int dischargeEnergyLow858 = dateParts[57];
        int dischargeEnergyHigh859 = dateParts[58];
        long dischargeEnergy858 = combineHighLow(dischargeEnergyHigh859, dischargeEnergyLow858);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日放电电量", name + "-PCS2", dischargeEnergy858, "kw.H"));

// 80860 总充电电量（低字节）80861 总充电电量（高字节）
        int totalChargeEnergyLow860 = dateParts[59];
        int totalChargeEnergyHigh861 = dateParts[60];
        long totalChargeEnergy860 = combineHighLow(totalChargeEnergyHigh861, totalChargeEnergyLow860);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "总充电电量", name + "-PCS2", totalChargeEnergy860, "kw.H"));

// 80862 总放电电量（低字节）80863 总放电电量（高字节）
        int totalDischargeEnergyLow862 = dateParts[61];
        int totalDischargeEnergyHigh863 = dateParts[62];
        long totalDischargeEnergy862 = combineHighLow(totalDischargeEnergyHigh863, totalDischargeEnergyLow862);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "总放电电量", name + "-PCS2", totalDischargeEnergy862, "kw.H"));

// 80864 运行模式PC3
        String operationMode864 = "未检测";
        if (dateParts[63] == 4369) {
            operationMode864 = "PQ模式";
        } else if (dateParts[63] == 8738) {
            operationMode864 = "VF模式";
        } else if (dateParts[63] == 17476) {
            operationMode864 = "VI模式";
        } else {
            operationMode864 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-PCS3", "运行模式", operationMode864, "",flywheelId));
        //80865 状态机值PC3
        int code3 = dateParts[64];
        switch (code3) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS3", "状态机值", "关机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS3", "状态机值", "静置","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS3", "状态机值", "充电","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS3", "状态机值", "放电","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS3", "状态机值", "故障","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS3", "状态机值", "无效码","",flywheelId));
        }

        // 80866 母线直流电压PC3
        double busVoltagePC3 = dateParts[65] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电压PC3", name + "-PCS3", busVoltagePC3, "V"));

// 80867 母线直流电流PC3
        double busCurrentPC3 = dateParts[66] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电流PC3", name + "-PCS3", busCurrentPC3, "A"));

// 80868 母线直流功率PC3
        double busPowerPC3 = dateParts[67] * 0.1;
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流功率PC3", name + "-PCS3", busPowerPC3, "KW"));

// 80869 当日充电电量（低字节）80870 当日充电电量（高字节）
        int chargeEnergyLow869 = dateParts[68];
        int chargeEnergyHigh870 = dateParts[69];
        long chargeEnergy869 = combineHighLow(chargeEnergyHigh870, chargeEnergyLow869);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日充电电量", name + "-PCS3", chargeEnergy869, "kw.H"));

// 80871 当日放电电量（低字节）80872 当日放电电量（高字节）
        int dischargeEnergyLow871 = dateParts[70];
        int dischargeEnergyHigh872 = dateParts[71];
        long dischargeEnergy871 = combineHighLow(dischargeEnergyHigh872, dischargeEnergyLow871);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日放电电量", name + "-PCS3", dischargeEnergy871, "kw.H"));

// 80873 总充电电量（低字节）80874 总充电电量（高字节）
        int totalChargeEnergyLow873 = dateParts[72];
        int totalChargeEnergyHigh874 = dateParts[73];
        long totalChargeEnergy873 = combineHighLow(totalChargeEnergyHigh874, totalChargeEnergyLow873);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "总充电电量", name + "-PCS3", totalChargeEnergy873, "kw.H"));

// 80875 总放电电量（低字节）80876 总放电电量（高字节）
        int totalDischargeEnergyLow875 = dateParts[74];
        int totalDischargeEnergyHigh876 = dateParts[75];
        long totalDischargeEnergy875 = combineHighLow(totalDischargeEnergyHigh876, totalDischargeEnergyLow875);
        list.add(TestInsert(datetimeStr, sum_site, sub_site, "总放电电量", name + "-PCS3", totalDischargeEnergy875, "kw.H"));

// 80877 运行模式PC4
        String operationMode877 = "未检测";
        if (dateParts[76] == 4369) {
            operationMode877 = "PQ模式";
        } else if (dateParts[76] == 8738) {
            operationMode877 = "VF模式";
        } else if (dateParts[76] == 17476) {
            operationMode877 = "VI模式";
        } else {
            operationMode877 = "状态码错误";
        }
        listStatus.add(statusInsert(datetimeStr, sum_site, sub_site, name + "-PCS4", "运行模式", operationMode877, "",flywheelId));

        //80878 状态机值PC4
        int code4 = dateParts[77];
        switch (code4) {
            case 0:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS4", "状态机值", "关机","",flywheelId));
                break;
            case 1:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS4", "状态机值", "静置","",flywheelId));
                break;
            case 2:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS4", "状态机值", "充电","",flywheelId));
                break;
            case 3:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS4", "状态机值", "放电","",flywheelId));
                break;
            case 4:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS4", "状态机值", "故障","",flywheelId));
                break;
            default:
                listStatus.add(statusInsert(datetimeStr, sum_site, sub_site,  name + "-PCS4", "状态机值", "无效码","",flywheelId));
        }

    // 80879 母线直流电压PC4
            double busVoltagePC4 = dateParts[78] * 0.1;
            list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电压PC4", name + "-PCS4", busVoltagePC4, "V"));

    // 80880 母线直流电流PC4
            double busCurrentPC4 = dateParts[79] * 0.1;
            list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流电流PC4", name + "-PCS4", busCurrentPC4, "A"));

    // 80881 母线直流功率PC4
            double busPowerPC4 = dateParts[80] * 0.1;
            list.add(TestInsert(datetimeStr, sum_site, sub_site, "母线直流功率PC4", name + "-PCS4", busPowerPC4, "KW"));

    // 80882 当日充电电量（低字节）80883 当日充电电量（高字节）
            int chargeEnergyLow882 = dateParts[81];
            int chargeEnergyHigh883 = dateParts[82];
            long chargeEnergy882 = combineHighLow(chargeEnergyHigh883, chargeEnergyLow882);
            list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日充电电量", name + "-PCS4", chargeEnergy882, "kw.H"));

    // 80884 当日放电电量（低字节）80885 当日放电电量（高字节）
            int dischargeEnergyLow884 = dateParts[83];
            int dischargeEnergyHigh885 = dateParts[84];
            long dischargeEnergy884 = combineHighLow(dischargeEnergyHigh885, dischargeEnergyLow884);
            list.add(TestInsert(datetimeStr, sum_site, sub_site, "当日放电电量", name + "-PCS4", dischargeEnergy884, "kw.H"));

    // 80886 总充电电量（低字节）80887 总充电电量（高字节）
            int totalChargeEnergyLow886 = dateParts[85];
            int totalChargeEnergyHigh887 = dateParts[86];
            long totalChargeEnergy886 = combineHighLow(totalChargeEnergyHigh887, totalChargeEnergyLow886);
            list.add(TestInsert(datetimeStr, sum_site, sub_site, "总充电电量", name + "-PCS4", totalChargeEnergy886, "kw.H"));

        //80888 总放电电量（低字节）80889 总放电电量（高字节）
        int totalDischargeCapacityLow888 = dateParts[87];
        int totalDischargeCapacityHigh889 = dateParts[88] ;
        long result40888 = combineHighLow(totalDischargeCapacityHigh889, totalDischargeCapacityLow888);
        list.add(TestInsert(datetimeStr,sum_site,sub_site,"总放电电量",name + "-PCS4",result40888,"kw.H"));

        //80890 系统故障锁存寄存器0
        int status80890 = dateParts[89];
        if (status80890 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80890 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流A相电压1级过压", "PCS1故障"));
            }
            if ((status80890 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流A相电压2级过压", "PCS1故障"));
            }
            if ((status80890 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流A相电压3级过压", "PCS1故障"));
            }
            if ((status80890 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流A相电压1级欠压", "PCS1故障"));
            }
            if ((status80890 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流A相电压2级欠压", "PCS1故障"));
            }
            if ((status80890 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流A相电压3级欠压", "PCS1故障"));
            }
            if ((status80890 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流B相电压1级过压 ", "PCS1故障"));
            }
            if ((status80890 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流B相电压2级过压", "PCS1故障"));
            }
            if ((status80890 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流B相电压3级过压", "PCS1故障"));
            }
            if ((status80890 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流B相电压1级欠压", "PCS1故障"));
            }
            if ((status80890 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流B相电压2级欠压 ", "PCS1故障"));
            }
            if ((status80890 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流B相电压3级欠压 ", "PCS1故障"));
            }
            if ((status80890 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流C相电压1级过压  ", "PCS1故障"));
            }
            if ((status80890 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流C相电压2级过压 ", "PCS1故障"));
            }
            if ((status80890 & 0x4000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流C相电压3级过压 ", "PCS1故障"));
            }
            if ((status80890 & 0x8000) != 0) {  // 检查第14位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器0", "交流C相电压1级欠压 ", "PCS1故障"));
            }
        }
        //80891 系统故障锁存寄存器1
        int status80891 = dateParts[90];
        if (status80891 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80891 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "交流C相电压2级欠压", "PCS1故障"));
            }
            if ((status80891 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "交流C相电压3级欠压", "PCS1故障"));
            }
            if ((status80891 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "A相电流1级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "A相电流2级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "A相电流3级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "B相电流1级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "B相电流2级过流 ", "PCS1故障"));
            }
            if ((status80891 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "B相电流3级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "C相电流1级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "C相电流2级过流", "PCS1故障"));
            }
            if ((status80891 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "C相电流3级过流 ", "PCS1故障"));
            }
            if ((status80891 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "直流电压1级过压 ", "PCS1故障"));
            }
            if ((status80891 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "直流电压2级过压  ", "PCS1故障"));
            }
            if ((status80891 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "直流电压3级过压 ", "PCS1故障"));
            }
            if ((status80891 & 0x4000) != 0) {  // 检查第14位（0x4000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "直流电压1级欠压 ", "PCS1故障"));
            }
            if ((status80891 & 0x8000) != 0) {  // 检查第15位（0x8000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器1", "直流电压2级欠压 ", "PCS1故障"));
            }
        }
        //80892 系统故障锁存寄存器2
        int status80892 = dateParts[91];
        if (status80892 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80892 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "直流电压3级欠压", "PCS1故障"));
            }
            if ((status80892 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "直流电流1级过流", "PCS1故障"));
            }
            if ((status80892 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "直流电流2级过流", "PCS1故障"));
            }
            if ((status80892 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "直流电流3级过流", "PCS1故障"));
            }
            if ((status80892 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "电池电压1级过压", "PCS1故障"));
            }
            if ((status80892 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "电池电压2级过压", "PCS1故障"));
            }
            if ((status80892 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "电池电压3级过压 ", "PCS1故障"));
            }
            if ((status80892 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "电池电压1级欠压", "PCS1故障"));
            }
            if ((status80892 & 0x0100) != 0) {  // 检查第8位（0x0100）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "电池电压2级欠压", "PCS1故障"));
            }
            if ((status80892 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "电池电压3级欠压", "PCS1故障"));
            }
            if ((status80892 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "直流正负压差过压 ", "PCS1故障"));
            }
            if ((status80892 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "A相电压瞬时过压 ", "PCS1故障"));
            }
            if ((status80892 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "B相电压瞬时过压  ", "PCS1故障"));
            }
            if ((status80892 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "C相电压瞬时过压 ", "PCS1故障"));
            }
            if ((status80892 & 0x4000) != 0) {  // 检查第14位（0x4000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "A相电流瞬时过流 ", "PCS1故障"));
            }
            if ((status80892 & 0x8000) != 0) {  // 检查第15位（0x8000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器2", "B相电流瞬时过流 ", "PCS1故障"));
            }
        }
        //80893 系统故障锁存寄存器3
        int status80893 = dateParts[92];
        if (status80893 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80893 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "C相电流瞬时过流", "PCS1故障"));
            }
            if ((status80893 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "母线电压瞬时过压", "PCS1故障"));
            }
            if ((status80893 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "直流电流瞬时过流", "PCS1故障"));
            }
            if ((status80893 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "电池电压瞬时过压", "PCS1故障"));
            }
            if ((status80893 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "A相IGBT故障", "PCS1故障"));
            }
            if ((status80893 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "B相IGBT故障", "PCS1故障"));
            }
            if ((status80893 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "C相IGBT故障 ", "PCS1故障"));
            }
            if ((status80893 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "光纤通信故障", "PCS1故障"));
            }
            if ((status80893 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "交流3级欠压", "PCS1故障"));
            }
            if ((status80893 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "A相电流回零故障 ", "PCS1故障"));
            }
            if ((status80893 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "A相电流回零故障 ", "PCS1故障"));
            }
            if ((status80893 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "A相电流回零故障  ", "PCS1故障"));
            }
            if ((status80893 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "直流电流回零故障 ", "PCS1故障"));
            }
            if ((status80893 & 0x4000) != 0) {  // 检查第14位（0x4000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "预充电故障 ", "PCS1故障"));
            }
            if ((status80893 & 0x8000) != 0) {  // 检查第15位（0x8000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器3", "主断路器故障 ", "PCS1故障"));
            }
        }
        //80894 系统故障锁存寄存器4
        int status80894 = dateParts[93];
        if (status80894 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80894 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "防雷器故障", "PCS1故障"));
            }
            if ((status80894 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "共模电流过流", "PCS1故障"));
            }
            if ((status80894 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "直流预充故障", "PCS1故障"));
            }
            if ((status80894 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "1级过频", "PCS1故障"));
            }
            if ((status80894 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "2级过频", "PCS1故障"));
            }
            if ((status80894 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "3级过频", "PCS1故障"));
            }
            if ((status80894 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "1级欠频 ", "PCS1故障"));
            }
            if ((status80894 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "2级欠频", "PCS1故障"));
            }
            if ((status80894 & 0x0100) != 0) {  // 检查第8位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "3级欠频", "PCS1故障"));
            }
            if ((status80894 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "IGBT过温故障", "PCS1故障"));
            }
            if ((status80894 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "AD驱动故障 ", "PCS1故障"));
            }
            if ((status80894 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "软件急停 ", "PCS1故障"));
            }
            if ((status80894 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "柜内过耗  ", "PCS1故障"));
            }
            if ((status80894 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "按钮急停 ", "PCS1故障"));
            }
            if ((status80894 & 0x4000) != 0) {  // 检查第14位（0x4000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "电抗过温故障 ", "PCS1故障"));
            }
            if ((status80894 & 0x8000) != 0) {  // 检查第15位（0x8000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器4", "电池或母线瞬时欠压 ", "PCS1故障"));
            }
        }
        //80895 系统故障锁存寄存器5
        int status80895 = dateParts[94];
        if (status80895 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80895 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "交流C相电压2级欠压", "PCS1故障"));
            }
            if ((status80895 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "交流C相电压3级欠压", "PCS1故障"));
            }
            if ((status80895 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "A相电流1级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "A相电流2级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "A相电流3级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "B相电流1级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "B相电流2级过流 ", "PCS1故障"));
            }
            if ((status80895 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "B相电流3级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0100) != 0) {  // 检查第8位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "C相电流1级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "C相电流2级过流", "PCS1故障"));
            }
            if ((status80895 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "C相电流3级过流 ", "PCS1故障"));
            }
            if ((status80895 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "直流电压1级过压 ", "PCS1故障"));
            }
            if ((status80895 & 0x1000) != 0) {  // 检查第12位（0x1000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "直流电压2级过压  ", "PCS1故障"));
            }
            if ((status80895 & 0x2000) != 0) {  // 检查第13位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "直流电压3级过压 ", "PCS1故障"));
            }
            if ((status80895 & 0x4000) != 0) {  // 检查第14位（0x4000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "直流电压1级欠压 ", "PCS1故障"));
            }
            if ((status80895 & 0x8000) != 0) {  // 检查第15位（0x8000）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器5", "直流电压2级欠压 ", "PCS1故障"));
            }
        }
        //80896 系统故障锁存寄存器6
        int status80896 = dateParts[95];
        if (status80896 == 0) {
            System.out.println(name + "辅助设备告警状态正常");
        } else {
            if ((status80896 & 0x0001) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "A相1#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0002) != 0) {  // 检查第0位（0x0001）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "A相2#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0004) != 0) {  // 检查第1位（0x0002）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "A相3#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0008) != 0) {  // 检查第3位（0x0008）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "A相4#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0010) != 0) {  // 检查第4位（0x0010）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "B相1#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0020) != 0) {  // 检查第5位（0x0020）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "B相2#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0040) != 0) {  // 检查第6位（0x0040）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "B相3#IGBT故障 ", "PCS1故障"));
            }
            if ((status80896 & 0x0080) != 0) {  // 检查第7位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "B相4#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0100) != 0) {  // 检查第8位（0x0080）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "C相1#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0200) != 0) {  // 检查第9位（0x0200）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "C相2#IGBT故障", "PCS1故障"));
            }
            if ((status80896 & 0x0400) != 0) {  // 检查第10位（0x0400）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "C相3#IGBT故障 ", "PCS1故障"));
            }
            if ((status80896 & 0x0800) != 0) {  // 检查第11位（0x0800）
                listAlert.add(alertInsert(datetimeStr, sum_site, sub_site, flywheelId, name + "-PCS1故障", "系统故障锁存寄存器6", "C相4#IGBT故障 ", "PCS1故障"));
            }
        }

        if(list!=null && !list.isEmpty()){
            //构建表名 wheel_data_坎德拉站点1_general_control
            String wheelDataTableName = TableNameUtils.getControlDataTableName(sum_site, sub_site);
            flywheelDataAnalysisDao.insertlistflywheel(list,wheelDataTableName);
        }
        if(listStatus!=null && !listStatus.isEmpty()){
            //构建表名 wheel_status_坎德拉站点1_general_control
            String wheelStatusTableName = TableNameUtils.getControlStatusTableName(sum_site,sub_site);
            flywheelDataAnalysisDao.insertStatusflywheel(listStatus,wheelStatusTableName);
        }

        if(listAlert!= null && !listAlert.isEmpty()){
            //构建表名 wheel_status_坎德拉站点1_general_control
            String wheelAlertTableName = TableNameUtils.getControlAlertTableName(sum_site,sub_site);
            flywheelDataAnalysisDao.insertAlertflywheel(listAlert,wheelAlertTableName);
        }

        sendMessage(sum_site);
    }

    // 复制source指定范围内数组 并返回新数组
    public static byte[] extractSubarray(byte[] source, int start, int length) {
        if (source == null || start < 0 || length < 0 || start + length > source.length) {
            throw new IllegalArgumentException("Invalid arguments");
        }
        byte[] subArray = new byte[length];
        System.arraycopy(source, start, subArray, 0, length);
        return subArray;
    }

    private static String getAirConStatus(int status, String name) {
        switch(status) {
            case 0: return "0：" + name + "停机";
            case 1: return "1：" + name + "运行";
            case 2: return "2：" + name + "故障";
            case 3: return "3：" + name + "断开";
            default: return "状态异常";
        }
    }

    private static String getUPSStatus(int status, String name) {
        switch(status) {
            case 0: return "0：" + name + "停机";
            case 1: return "1：" + name + "运行";
            case 2: return "2：" + name + "故障";
            case 3: return "3：" + name + "断开";
            default: return "状态异常";
        }
    }
}



